// 引入axios
import axios from "axios"
import { ElMessageBox } from 'element-plus'
import  router  from "@/router"
import NProgress from 'nprogress' 
// 配置axios
let http =axios.create({
    // 基础地址
    baseURL: '/api',
    // 超时设置
    timeout: 1000 * 10,
    // 是否携带数据
    withCredentials: true
})
// 配置拦截器
//请求拦截器,所有的axios请求都会被拦截器拦截,可以通过拦截器添加额外的配置
http.interceptors.request.use(config=>{
    // console.log(config)
    // 先获取token
    // 打开进度条
    NProgress.start()
    let token =sessionStorage.getItem('my-token');
    config.headers.authorization = token
    return config
})
//响应拦截器,所有的axios响应都会被响应拦截器拦截,可以对拦截的响应进行额外的配置
http.interceptors.response.use(config=>{
    // 关闭进度条
    NProgress.done()
    // config是每个请求响应的结果，所有的请求返回的结果都需要经过这条门才能到组件那
    // console.log('config===',config);
    if(config.data.state){
        // 响应正常
        return config
    }else{
        // 不需要弹窗提示的路径
        let excludePaths=["/sms/send","/order/query_order_status"];
        // console.log('config===',config);
        //如果excludePaths中不包含当前的响应路径,那么不需要弹窗
        if(!excludePaths.includes(config.config.url)){
            // 响应了错误
            ElMessageBox.alert(config.data.msg, '错误提示', {type: 'error' })
        } 
        // 判断登录失效的情况 10022（登录状态过期） 1004(token失效了）前后端通俗约定状态码，并不是http状态码
        if(config.data.code == '10022' || config.data.code == '1004'){
            // 退到登录页，清掉token
            sessionStorage.removeItem('my-token')
            router.push('/login')
            // 刷新页面,清掉缓存
            location.reload()
        }
        return Promise.reject(config.data.msg)
    }

})
export default http;